


//创建二叉树
function TreeNode(val) {
  this.val = val;
  this.left = this.right = null;
}
let root = new TreeNode(3);
root.left = new TreeNode(9);
root.right = new TreeNode(20);
root.right.left = new TreeNode(15);
root.right.right = new TreeNode(7);

// 给你二叉树的根节点 root ，返回其节点值的 层序遍历 。 （即逐层地，从左到右访问所有节点）。
//用到的算法：
//1. 层序遍历：
//2. 层序遍历的队列：
//3. 层序遍历的递归：


// var levelOrder = function(root) {
//     if(!root) return [];
//     let res = [];
//     let queue = [root]; // 创建一个队列
//     while(queue.length){  // 当队列不为空时
//         let len = queue.length; // 当前队列的长度
//         console.log(queue);
//         let temp = [];  // 创建一个临时数组
//         for(let i = 0; i < len; i++){ // 遍历当前队列
//             // 将当前队列的每一个元素放入临时数组中
//             let node = queue.shift(); //在这一层中取出队列的第一个元素
//             temp.push(node.val);  // 将元素添加到临时数组中
//             //  将当前节点的左右节点添加到队列中 为下一层做准备
//             if(node.left) queue.push(node.left);  // 如果左节点不为空，将左节点添加到队列中
//             if(node.right) queue.push(node.right);  // 如果右节点不为空，将右节点添加到队列中
//         }
//         res.push(temp); // 将临时数组添加到结果数组中
//     }
//     return res;
// };

var levelOrder = function(root) {
  //边界条件判断
  if (!root) return []; //
  let res = [];// 创建一个
  //创建队列
  let queue = [root];//按层级push
  while (queue.length) {//当当前层级节点数为零
    let len = queue.length//
    let temp = [];//
    for (let i = 0; i < len; i++) {
      let node = queue.shift();
      temp.push(node.val)
      if (node.left) queue.push(node.left);
      if (node.right) queue.push(node.right);
    }
    res.push(temp);
  }
  return res;
};
console.log(levelOrder(root));